package modelo;

import excecao.SaldoInsuficienteException;
import excecao.ValorInvalidoException;



public class Conta implements Comparable<Conta>{
	private   double saldo;
	private   String nome;
	private   int    agencia;
	private   String titular;
	protected int    numero;
	
	/**
	 * @author MICHAEL
	 * realiza um saque na conta dando o valor passado...
	 * @param valor valor a ser sacado
	 * @param throws Exception caso o saldo seja insuficiente
	 */
	
	public Conta(double saldo) {//
		super();
		this.saldo = saldo;
	}

	// esse Exception vaza... precisa ser tratado..
    public void saca(double valor) throws Exception{
    	if (saldo >= valor){
    		this.saldo -= valor;
    	}
    	else {
    		throw new SaldoInsuficienteException(saldo);
    	}
    }
	
    public synchronized void deposita(double valor){	
    	if ( valor > 0 ){
    		this.saldo += valor;
    	} 
    	else {
    		throw new ValorInvalidoException(valor);
      	  //throw new IllegalArgumentException("Deposito Invalido. Valor Negativo!!");
    	}
    	
    }
    
    
	public void setSaldo(int saldo) {
		this.saldo = saldo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getAgencia() {
		return agencia;
	}
	public void setAgencia(int agencia) {
		this.agencia = agencia;
	}
	
	public String getTitular() {
		return titular;
	}

	public void setTitular(String titular) {
		this.titular = titular;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public double getSaldo() {
		return saldo;
	}

	public void imprime() {
		System.out.println(nome);
		System.out.println(agencia);
		System.out.println(saldo);
	}
	
	@Override
	public String toString() {
		return "Conta com saldo " + saldo;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		long temp;
		temp = Double.doubleToLongBits(saldo);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Conta other = (Conta) obj;
		if (Double.doubleToLongBits(saldo) != Double
				.doubleToLongBits(other.saldo))
			return false;
		return true;
	}

	@Override
	public int compareTo(Conta outraConta) {
		if( this.saldo < outraConta.saldo ) return -1;
		if( this.saldo > outraConta.saldo ) return 1;
		return 0;
	}
	

}
